package navalgo3.Modelo;
import java.util.ArrayList;
import java.util.Iterator;



public class BuscadorDeColisiones {

	private ArrayList<Nave> navesColisionables;
	private ArrayList <Mina> minasColisionablesConTiempo;
	private ArrayList <Mina> minasColisionablesPorContacto;
	private ArrayList <Fragmento> fragmentosTotales;
	private ArrayList <Disparo> disparosColisionables;
	private Colisionador colisionador;
	
	public BuscadorDeColisiones(ArrayList<Mina> minas, ArrayList<Disparo> disparos, ArrayList<Nave> naves) {
		navesColisionables = naves;
		minasColisionablesConTiempo = minas;
		disparosColisionables = disparos;
		this.colisionador = new Colisionador();
		this.minasColisionablesPorContacto = new ArrayList<Mina>();
		this.obtenerMinasPorContacto();
		this.fragmentosTotales = new ArrayList<Fragmento>();
		this.obtenerFragmentosTotales();
		
	}

	private void obtenerMinasPorContacto() {
		Iterator iterador = minasColisionablesConTiempo.iterator();
		while (iterador.hasNext()){
			Mina minaActual = (Mina) iterador.next();
			if ((minaActual.getTiempo())<0){
				minasColisionablesPorContacto.add(minaActual);
				iterador.remove();
			}
		}
	}

	private void obtenerFragmentosTotales(){
		this.obtenerFragmentosPorTiempo();
		this.obtenerFragmentosPorContacto();
	}
	
	private void obtenerFragmentosPorTiempo(){
		if (minasColisionablesConTiempo.size()>0){
			for (Mina minaActual : minasColisionablesConTiempo){
				this.colisionador.explotarMina(minaActual);
				fragmentosTotales.addAll(minaActual.getFragmentos());
			}
		}
		
		
	}		
	
	private void obtenerFragmentosPorContacto(){
		if (minasColisionablesPorContacto.size()>0){
			for (Nave naveActual : navesColisionables){
				for (Mina minaActual : minasColisionablesPorContacto){
					if (naveActual.tieneParteEn(minaActual.getPosicion())){
						this.colisionador.explotarMina(minaActual);
						this.fragmentosTotales.addAll(minaActual.getFragmentos());
					}
				}
			}
		}
		
	}

	public void buscarColisionDisparos(){
		for(Disparo disparoActual : disparosColisionables){
			for (Nave naveActual : navesColisionables){
				if(naveActual.tieneParteEn(disparoActual.getPosicion())){
					this.colisionador.colision(naveActual, disparoActual);	
				}
			}
		}
	}
	
	public void buscarColisionFragmentos(){
		for(Fragmento fragmentoActual : fragmentosTotales){
			for (Nave naveActual : navesColisionables){
				if(naveActual.tieneParteEn(fragmentoActual.getPosicion())){
					this.colisionador.colision(naveActual, fragmentoActual);	
				}
			}
		}
	}

	public void buscarTodasLasColisiones() {
		this.buscarColisionDisparos();
		this.buscarColisionFragmentos();
		}
}
